From: Ian Campbell Date: Fri, 2 Mar 2012 12:33:25 +0000 (+0000) Subject: libxl: only set b_info->u.hvm.bios if type if HVM X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/?a=commitdiff_plain;h=132531885a247283fcb2dd6c463fc7fa30889118;p=xen.git libxl: only set b_info->u.hvm.bios if type if HVM This fixes a PV guest breakage causes by 24932:6eac4a1ee646 "libxl: Select BIOS using libxl_domain_build_info_setdefaults". I have also included a sanity check on b_info->type. Signed-off-by: Ian Campbell Acked-by: Stefano Stabellini Committed-by: Ian Campbell --- diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 97807595b7..8417661108 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -67,28 +67,34 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc, int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info) { + if (b_info->type != LIBXL_DOMAIN_TYPE_HVM && + b_info->type != LIBXL_DOMAIN_TYPE_PV) + return ERROR_INVAL; + if (!b_info->device_model_version) b_info->device_model_version = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; - if (!b_info->u.hvm.bios) - switch (b_info->device_model_version) { - case 1: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break; - case 2: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break; - default:return ERROR_INVAL; - } + if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) { + if (!b_info->u.hvm.bios) + switch (b_info->device_model_version) { + case 1: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break; + case 2: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break; + default:return ERROR_INVAL; + } - /* Enforce BIOS<->Device Model version relationship */ - switch (b_info->device_model_version) { - case 1: - if (b_info->u.hvm.bios != LIBXL_BIOS_TYPE_ROMBIOS) - return ERROR_INVAL; - break; - case 2: - if (b_info->u.hvm.bios == LIBXL_BIOS_TYPE_ROMBIOS) - return ERROR_INVAL; - break; - default:abort(); + /* Enforce BIOS<->Device Model version relationship */ + switch (b_info->device_model_version) { + case 1: + if (b_info->u.hvm.bios != LIBXL_BIOS_TYPE_ROMBIOS) + return ERROR_INVAL; + break; + case 2: + if (b_info->u.hvm.bios == LIBXL_BIOS_TYPE_ROMBIOS) + return ERROR_INVAL; + break; + default:abort(); + } } libxl_defbool_setdefault(&b_info->device_model_stubdomain, false);